/**
 * 请勿将俱乐部专享资源复制给其他人，保护知识产权即是保护我们所在的行业，进而保护我们自己的利益
 * 即便是公司的同事，也请尊重 JFinal 作者的努力与付出，不要复制给同事
 * <p>
 * 如果你尚未加入俱乐部，请立即删除该项目，或者现在加入俱乐部：http://jfinal.com/club
 * <p>
 * 俱乐部将提供 jfinal-club 项目文档与设计资源、专用 QQ 群，以及作者在俱乐部定期的分享与答疑，
 * 价值远比仅仅拥有 jfinal club 项目源代码要大得多
 * <p>
 * JFinal 俱乐部是五年以来首次寻求外部资源的尝试，以便于有资源创建更加
 * 高品质的产品与服务，为大家带来更大的价值，所以请大家多多支持，不要将
 * 首次的尝试扼杀在了摇篮之中
 */

package com.avengers.core.model;

import com.avengers.core.AbstractEnhancerConfig;
import com.avengers.common.model.base.BaseModel;
import com.avengers.core.model.generator.AvengersModelGenerator;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;

import javax.sql.DataSource;

/**
 * Model、BaseModel、_MappingKit 生成器
 */
public class DoModulesModelGenerator {
    private static final String DB_FILE_NAME = "db.prop";
    private static final String DATABASE_CONFIG_NAME = "avengers";

    private static final String[] needsTables = {
            "account",
            "booking_record",
            "booking_record_2024"
    };

    private static final String[] excludesTables = {
    };

    /**
     * 重用 JFinalClubConfig 中的数据源配置，避免冗余配置
     */
    public static DataSource getDataSource() {
        DruidPlugin druidPlugin = AbstractEnhancerConfig.createDruidPlugin(PropKit.use(DB_FILE_NAME), DATABASE_CONFIG_NAME);
        druidPlugin.start();
        return druidPlugin.getDataSource();
    }

    public static void main(String[] args) {
        // base model 所使用的包名
        String baseModelPackageName = "com.avengers.common.model.base";
        // base model 文件保存路径
        String baseModelOutputDir = PathKit.getWebRootPath()
                + "/src/test/java/com/avengers/common/model/base";

        System.out.println("输出路径：" + baseModelOutputDir);

        // model 所使用的包名 (MappingKit 默认使用的包名)
        String modelPackageName = "com.avengers.common.model";
        // model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
        String modelOutputDir = baseModelOutputDir + "/..";

        // 创建生成器
        AvengersModelGenerator gen = new AvengersModelGenerator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);
        gen.setBaseModelClass(BaseModel.class);
        // 设置数据库方言
        gen.setDialect(new MysqlDialect());
        // 生成的表名
        gen.addIncludeTables(needsTables);
        gen.addExcludedTable(excludesTables);
        // 设置是否在 Model 中生成 dao 对象
        gen.setGenerateDaoInModel(true);
        // 设置要增加的model前缀
        gen.setModelNameStart("");
        gen.setGenerateRemarks(true);
        gen.setGenerateChainSetter(true);
        gen.setMappingKitClassName("AllMappingsForModules");
        // 生成
        gen.generate();
    }
}
